#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<bitset>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define rep(i,a,b) for(register int i = (a);i <= (b);++i)
#define per(i,a,b) for(register int i = (a);i >= (b);--i) 
#define mkp std::make_pair
typedef long long ll;
typedef unsigned long long ull;
using std::string;using std::cin;using std::cout;
using std::rand;
const int N = 1e6+9;
const double eps = 1e-7;
int _,n,m;
double l,r,a[2*N];

struct stom{
    double x,y,v,bx,by;
}p[200],ans;

inline double rnd(){return (double)rand()/RAND_MAX;}

inline double f(double x){
    double ans = a[0] , p = x;
    rep(i,1,n) ans += a[i] * x , x *= p;
    return ans;
}

inline void upd(int pos){
    p[pos].v = p[pos].v * 0.5 + 2 * rnd()*(p[pos].bx + ans.x - p[pos].x * 2);
    p[pos].x += p[pos].v;
    if(p[pos].x < l) p[pos].x = l , p[pos].v *= -1;
    if(p[pos].x > r) p[pos].x = r , p[pos].v *= -1;
    p[pos].y = f(p[pos].x);
    if(p[pos].by < p[pos].y) p[pos].bx = p[pos].x , p[pos].by = p[pos].y;
    return;
}

int main(){
    std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    //freopen("in.in", "r", stdin);
    cin >> n >> l >> r;
    per(i,n,0) cin >> a[i];
    srand(a[n]+a[0]);
    ans.y = -1e9;
    rep(i,1,100){
        p[i].x = p[i].bx = rnd()*(r-l) + l,
        p[i].y = p[i].by = f(p[i].x),
        p[i].v = 0;
        if(ans.y < p[i].by) ans.x = p[i].x , ans.y = p[i].y;
    }
    rep(round,1,100) rep(i,1,100){
        upd(i);
        if(ans.y < p[i].by) ans.x = p[i].x , ans.y = p[i].y;
    }
    printf("%.5lf\n",ans.x);
    return 0;
}